package com.atguigu.gmallrealtime.app.func;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmallrealtime.bean.TradeSkuOrderBean;
import com.atguigu.gmallrealtime.util.HBaseUtil;
import com.atguigu.gmallrealtime.util.JedisUtil;
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.configuration.Configuration;
import redis.clients.jedis.Jedis;

/**
 * @author yhm
 * @create 2023-10-12 15:58
 */
public abstract class DimMapFunctionHbase<T> extends RichMapFunction<T, T> implements DimMapFunction<T> {
    Jedis jedis = null;
    @Override
    public void open(Configuration parameters) throws Exception {
        // 获取hbase连接
        // flink的算子会因为数据造成的异常重复创建  导致open方法重复执行 如果在open里面创建连接 有可能多从创建
        // 单例直接用
        // 获取redis连接
        jedis = JedisUtil.getJedis();
    }

    @Override
    public void close() throws Exception {
        // 关闭hbase连接
        // 单例不用关闭
        // 关闭redis连接
        jedis.close();
    }
    @Override
    public T map(T value) throws Exception {
        // 使用连接读取dim数据
        JSONObject dimSkuInfo = HBaseUtil.getDimWithRedis(jedis,getTable(), getId(value));
        // 合并dim和bean的数据
        join(value,dimSkuInfo);
        return value;
    }
}
